package com.ruoyi.datastatistics.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.datastatistics.domain.TerminalsFreezeXb;
import com.ruoyi.datastatistics.domain.vo.EnergyUseRankVo;
import com.ruoyi.datastatistics.vo.DosageStatistics;
import com.ruoyi.datastatistics.vo.TerminalUsageVO;
import com.ruoyi.datastatistics.wxentity.WXTerminalsFreezeXb;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 小冻结数据（设备维度）Mapper接口
 *
 * @author ruoyi
 * @date 2023-09-14
 */
public interface TerminalsFreezeXbMapper extends BaseMapper<TerminalsFreezeXb> {
    /**
     * 查询小冻结数据（设备维度）
     *
     * @param ID 小冻结数据（设备维度）主键
     * @return 小冻结数据（设备维度）
     */
    public TerminalsFreezeXb selectTerminalsFreezeXbByID(Long ID);

    /**
     * 查询小冻结数据（设备维度）列表
     *
     * @param terminalsFreezeXb 小冻结数据（设备维度）
     * @return 小冻结数据（设备维度）集合
     */
    public List<TerminalsFreezeXb> selectTerminalsFreezeXbList(TerminalsFreezeXb terminalsFreezeXb);

    /**
     * 新增小冻结数据（设备维度）
     *
     * @param terminalsFreezeXb 小冻结数据（设备维度）
     * @return 结果
     */
    public int insertTerminalsFreezeXb(TerminalsFreezeXb terminalsFreezeXb);

    /**
     * 修改小冻结数据（设备维度）
     *
     * @param terminalsFreezeXb 小冻结数据（设备维度）
     * @return 结果
     */
    public int updateTerminalsFreezeXb(TerminalsFreezeXb terminalsFreezeXb);

    /**
     * 删除小冻结数据（设备维度）
     *
     * @param ID 小冻结数据（设备维度）主键
     * @return 结果
     */
    public int deleteTerminalsFreezeXbByID(Long ID);

    /**
     * 批量删除小冻结数据（设备维度）
     *
     * @param IDs 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteTerminalsFreezeXbByIDs(Long[] IDs);
    public int deleteTerminalsFreezeXbByType(@Param("frozenType") String frozenType, @Param("freezeTime") String freezeTime);

    public List<DosageStatistics> selectDosageStatistics(@Param("frozenType") String frozenType, @Param("areaId") String areaId,
                                                         @Param("beginTime") String beginTime, @Param("endTime") String endTime);

    List<WXTerminalsFreezeXb> WxList(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("reportType") String reportType, @Param("terminalId") String terminalId);

    List<WXTerminalsFreezeXb> WxListOrderByFlow(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("reportType") String reportType, @Param("terminalId") String terminalId);

    List<TerminalsFreezeXb> getReadingRateList(Map<String, Object> queryMap);

    void insertBatch(List<TerminalsFreezeXb> list);

    /**
     * 户表区域日用量统计
     *
     * @param usage 筛选条件
     * @return 统计数据
     */
    List<TerminalUsageVO> selectTerminalUsageList(TerminalUsageVO usage);

    /**
     * 户表区域日用量统计
     *
     * @param usage 筛选条件
     * @return 统计数据
     */
    List<TerminalUsageVO> selectTerminalUsageGroupBySheetsIdAndDate(TerminalUsageVO usage);

    /**
     * 找出指定日期或年月未生成冻结数据的表信息
     * @param frozenType 冻结类型
     * @param dates 指定日期或年月之前的所有时间
     * @return 表信息
     */
    List<TerminalsFreezeXb> selectNoFrozenXb(@Param("frozenType") String frozenType, @Param("dates") List<String> dates);
    /**
     * 找出指定日期或年月未生成冻结数据的表信息总条数
     * @param frozenType 冻结类型
     * @param dates 指定日期或年月之前的所有时间
     * @return 总条数
     */
    long countNoFrozenXb(@Param("frozenType") String frozenType, @Param("dates") List<String> dates);
    /**
     * 查找小表日冻结数据
     * @param list list
     * @return List
     */
    List<TerminalsFreezeXb> selectDailyFrozenDataXb(@Param("list") List<TerminalsFreezeXb> list);

    /**
     * 根据日期查找小表日冻结数据
     *
     * @param date 日期
     * @return List
     */
    List<TerminalsFreezeXb> selectDailyFrozenDataXbByDate(@Param("date") String date);

    /**
     * 根据年月查找小表月冻结数据
     *
     * @param yearMonth 年月
     * @return List
     */
    List<TerminalsFreezeXb> selectMonthlyFrozenDataXbByYearMonth(@Param("yearMonth") String yearMonth);


    /**
     * 日报表
     * @param freezeTime
     * @return
     */
    int insertByDay(@Param("freezeTime")String freezeTime);

    /**
     * 月报表
     * @param freezeTime
     * @return
     */
    int insertByMonth(@Param("freezeTime")String freezeTime);

    /**
     * 生成日报表，查询逻辑
     *
     * @return List
     */
    List<TerminalsFreezeXb> selectDailyForInsertByDay(@Param("freezeTime") String freezeTime);
    /**
     * 生成月报表，查询逻辑
     *
     *
     * @return List
     */
    @Options(timeout = 10800)
    List<TerminalsFreezeXb> selectDailyForinsertByMonthForOne(@Param("frequencyType")String frequencyType,@Param("freezeTime")String freezeTime,@Param("userId")String userId);

    List<TerminalsFreezeXb> selectDailyForinsertByMonthForTwo(@Param("frequencyType")String frequencyType,@Param("freezeTime")String freezeTime,@Param("userId")String userId);

    List<TerminalsFreezeXb> selectDailyForinsertByMonthForThree(@Param("frequencyType")String frequencyType,@Param("freezeTime")String freezeTime,@Param("userId")String userId,@Param("departureTime")String departureTime);

    List<EnergyUseRankVo> selectUseRank(@Param("tenantId") String tenantId,@Param("month") String month);
    //用户离场的设备用量String frequencyType, String freezeTime, Integer userId
    List<TerminalsFreezeXb> selectDailyForInsertByPhase_2(@Param("frequencyType")String frequencyType,@Param("freezeTime")String freezeTime,@Param("userId")Integer userId);
    //离场用户影响的公摊生产、消费用户
    List<TerminalsFreezeXb> selectDailyForinsertByPhase_3(@Param("frequencyType")String frequencyType,@Param("freezeTime")String freezeTime,@Param("userId")Integer userId);
}
